libxl: libxl__xs_transaction_commit should always clear the transaction.
authorIan Campbell <ian.campbell@citrix.com>
Fri, 29 Jun 2012 10:19:02 +0000 (11:19 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Fri, 29 Jun 2012 10:19:02 +0000 (11:19 +0100)
commita79655807bdc466f43a7f0c2f0d683ee50a311f5
tree7811650dc9ade2cc20809181b283362ca419cb6f
parent83cc69faaf25b7b629b7c0a9ab70287219b86344
libxl: libxl__xs_transaction_commit should always clear the transaction.

This includes the EAGAIN case.

Users are of the form:

   xs_transaction_t t = 0;

   for (;;) {
        rc = libxl__xs_transaction_start(gc, &t);

rc = stuff
if (rc) goto out;
...more...

        rc = libxl__xs_transaction_commit(gc, &t);
        if (!rc) break;
        if (rc<0) goto out;
    }
  ...
 out:

So in EAGAIN (commit -> +1) we will go round the loop again and call start
which leads to:
    xl: libxl_xshelp.c:174: libxl__xs_transaction_start: Assertion `!*t' failed.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libxl/libxl_xshelp.c